package com.cn.web.controller;

import com.cn.common.util.PageUtil;
import com.cn.pojo.SysNotice;
import com.cn.service.SysNoticeService;
import com.cn.web.pojo.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/notice")
public class SysNoticeController {
    @Autowired
    private SysNoticeService sysNoticeService;
    /**
     *1、 Lambda 表达式  当接口里只有一个抽象方法时就可以使用lamdba表达式
     *  并且可以不用写参数类型，底层会自动去判断类型
     * list.foreach(integer)->System.out.print(integer))
     * list.foreach(Integer integer)->...这个就不用写
     * 原式:
     * list.foreach(new Consumer<Integer>(){
     * @Override
     *    public void accept(Intger integr){
     *       sout(intger);
     *    }
     * }
     *
     * 2、为了不让数据写死在程序里，然后也提高代码的复用可以把写一个专门的分页工具类
     * 1)可以不写工具类 直接在直接传入参数 （SysNotice notic,int pagenum,int pagesize),
     * 2)也可以使用HttpServletRequest 获取请求参数
     * request.getParam("pagenum")
     * request.getParam("pagesize")
     * 3)在SysNotice类中添加 pagenum和pagesize属性接受参数
     *
     * 但以三种方法不能复用，如果别处需要还得重新写，所以可以把它提取出来，写一个工具类
     */
    @GetMapping("/findNotice")
    public JsonResult doFindNotices(SysNotice notice){
//        PageInfo<SysNotice> pageInfo =PageHelper.startPage(1,3).doSelectPageInfo(new ISelect() {
//            @Override
//            public void doSelect() {
//                sysNoticeService.findNotices(notice);
//            }
//        });
        //启动分页查询拦截 没有提取出去写死在代码里
//        PageInfo<SysNotice> pageInfo= PageHelper.startPage(1,3)
//                            //执行查询
//                            .doSelectPageInfo(()->sysNoticeService.findNotices(notice));
        return new JsonResult(PageUtil.startPage().doSelectPageInfo(()->{//这里大括号可以省略
            sysNoticeService.findNotices(notice);
        }));
    }
    @PostMapping("/saveNotice")
    public JsonResult doSaveNotice(@RequestBody SysNotice notice){
        sysNoticeService.saveNotice(notice);
        return new JsonResult("save ok");
    }
    @GetMapping("/fidnById/{id}")
    public JsonResult doFindById(@PathVariable Long id){
        return new JsonResult(sysNoticeService.findById(id));
    }
    @PutMapping("/updateNotice")
    public JsonResult doUpdateNotice(SysNotice notice){
        sysNoticeService.updateNotice(notice);
        return new JsonResult("update ok");
    }
    @DeleteMapping("/deleteNotice/{ids}")
    public JsonResult doDeleteById(@PathVariable Long... ids){
        sysNoticeService.deleteById(ids);
        return new JsonResult("delete ok");
    }

}
